{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "3b6a29a5",
   "metadata": {},
   "source": [
    "<a href=\"https://www.youtube.com/watch?v=6X0xfXMKCjM&list=PLxqBkZuBynVQEvXfJpq3smfuKq3AiNW-N&index=29&ab_channel=Rohan-Paul-AI\"><h1 style=\"font-size:250%; font-family:cursive; color:#ff6666;\"><b>Link YouTube Video - Roberta-Large Named Entity Recognizition on Kaggle NLP Competition with PyTorch</b></h1></a>\n",
    "\n",
    "[![IMAGE ALT TEXT](https://imgur.com/W6xP1PF.png)](https://www.youtube.com/watch?v=6X0xfXMKCjM&list=PLxqBkZuBynVQEvXfJpq3smfuKq3AiNW-N&index=29&ab_channel=Rohan-Paul-AI \"\")\n",
    "\n",
    "---------------------\n",
    "\n",
    "### [Kaggle - Feedback Prize - Evaluating Student Writing](https://www.kaggle.com/competitions/feedback-prize-2021)\n",
    "\n",
    "### You can run the Notebook `Pytorch-Roberta_Large.ipynb`  either Locally or in Kaggle - Just modify the 'ROOT_DIR' variable to properly refer to the dataset\n",
    "\n",
    "[Feedback Prize-Evaluating Student Writing](https://www.kaggle.com/c/feedback-prize-2021)\n",
    "\n",
    "\n",
    "-------------------------------------------\n",
    "\n",
    "## The classification Problem in this competition\n",
    "\n",
    "Basically, we have a bunch of essays written by kids in the age range of about 12-18 years old in which we have to find word sequences that can be classified as one of 7 \"discourse types\", which are\n",
    "\n",
    "* Lead - an introduction that begins with a statistic, a quotation, a description, or some other device to grab the reader’s attention and point toward the thesis\n",
    "  Interestingly, this is not present in all the the training set data. Around 40% of the ids do not have a lead!\n",
    "\n",
    "* Position - an opinion or conclusion on the main question\n",
    "  Almost all the training data has a Position. However, it is not always at the beginning. \n",
    "\n",
    "* Claim - a claim that supports the position\n",
    "  Almost all the training data has a Claim. One training set data has 12 Claims!! Over half have at least 3 claims\n",
    "\n",
    "* Counterclaim - a claim that refutes another claim or gives an opposing reason to the position\n",
    "\n",
    "* Rebuttal - a claim that refutes a counterclaim\n",
    "\n",
    "* Evidence - ideas or examples that support claims, counterclaims, or rebuttals.\n",
    "\n",
    "* Concluding Statement - a concluding statement that restates the claims\n",
    "\n",
    "So basically, we are tasked with giving feedback on argumentative essays written by students. Specifically, our task is to predict the human annotations.\n",
    "\n",
    "This annotation will be done in 2 steps:\n",
    "\n",
    "### - Segment each essay into discrete, rhetorical and argumentative elements (i.e., discourse elements) .\n",
    "\n",
    "### - Classify each element as one of 7 \"discourse types\",\n",
    "\n",
    "## Basics on the training data\n",
    "\n",
    "We have a bunch of text files and a separate train.csv with labels. \n",
    "\n",
    "In the csv, we get reference to the text files, and then multiple lines per text file with spans indicating a specific discourse type.\n",
    "\n",
    "The Ground Truth here is a combination of the discourse type and the prediction string. \n",
    "\n",
    "Here, Kaggle provides labels as characters (discourse start, discourse end) or words (predictionstring). \n",
    "\n",
    "--------------\n",
    "\n",
    "train.csv - a .csv file containing the annotated version of all essays in the training set\n",
    "\n",
    "\n",
    "* **discourse_id** - discourse_id is a unique identifier for each discourse element. Basically, each row in train.csv contains one discourse element, and the discourse_id is what identifies each of these discourse elements.\n",
    "\n",
    "It is different to the 'id' column in that 'id' is the identifier of the full student essay that the discourse element came from. So multiple rows can have the same value for 'id'. On the other hand, each row in train.csv will have a different value for 'discourse_id', since each row is a different discourse element.\n",
    "\n",
    "Hope that helps and let me know if it's still unclear.\n",
    "\n",
    "* **discourse_start** - character position where discourse element begins in the essay response\n",
    "\n",
    "* **discourse_end** - character position where discourse element ends in the essay response\n",
    "\n",
    "* **discourse_text** - text of discourse element\n",
    "\n",
    "* **discourse_type** - classification of discourse element\n",
    "\n",
    "* **discourse_type_num** - enumerated class label of discourse element\n",
    "\n",
    "* **predictionstring** - the word indices of the training sample, as required for predictions\n",
    "\n",
    "The **predictionstring** corresponds to - the index of the words in the essay and the predicted discourse type for this sequence of words, SHOULD be correct. \n",
    "\n",
    "There can be partial matches, if the correct discourse type is predicted but on a longer or shorter sequence of words than specified in the Ground Truth.\n",
    "\n",
    "https://www.kaggle.com/code/erikbruin/nlp-on-student-writing-eda"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "ed74fc6c",
   "metadata": {
    "papermill": {
     "duration": 0.027407,
     "end_time": "2022-01-30T05:43:26.521323",
     "exception": false,
     "start_time": "2022-01-30T05:43:26.493916",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Notebook keypoints\n",
    "\n",
    "- Build a baseline model taking this as a token classification or \"NER\" problem\n",
    "- Build a \"RoBERTa-large\" model with `max_length=512`\n",
    "- A NER \"ShortFormer\" with chunks, strides\n",
    "- Manage the chunking with stride of the texts with length greater than 512 (and the posterior merge).\n",
    "\n",
    "\n",
    "1. At the tokenizing step, where I used the hugging face tokenizer functionality to leverage the chunking\n",
    "2. Validation is now performed on a per-epoch fashion\n",
    "\n",
    "\n",
    "## The reason behind the focus on Longformer in this competiton\n",
    "\n",
    "For the Transformer models, the Transformer architecture - has a matrix multiplication that scales quadratically with the input sequence length in terms of memory, making the regular Transformer very expensive for longer sequences. Because of which we have the `512` tokens max length in the BERT-like models.\n",
    "\n",
    "As a partial solution to this, we have [LongFormer](https://arxiv.org/abs/2004.05150) and [BigBird](https://arxiv.org/abs/2007.14062)\n",
    "\n",
    "The Longformer model's attention mechanism is designed to enable efficient processing of long sequences. It differs from standard self-attention mechanisms in a few key ways:\n",
    "\n",
    "Sliding Window Attention: Instead of attending to all positions in the input sequence as in standard self-attention, the Longformer attends only to a sliding window of adjacent positions. This reduces the computational complexity of the attention mechanism from O(n^2) to O(n), where n is the length of the input sequence.\n",
    "\n",
    "With LongFormer the lower cost of sparse self-attention mechanisms allows these models to handle up to `4096` in a regular GPU, which is, `8x` what a normal Transformer can.\n",
    "\n",
    "Given the lengths of the texts in this competition, many focus \"Longformer\" type models.\n",
    "\n",
    "However, the classic 512-token models such as BERT do have a mechanism to handle sequence of length greater than `512` basically by\n",
    "\n",
    "1. Split it into chunks of `512` tokens (with some overlap with the stride param)\n",
    "2. Use the model to process those chunks\n",
    "3. Merge back the predictions over the chunks to obtain predictions over the full text"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "7fc5f2da",
   "metadata": {},
   "source": [
    "------------------------------------\n",
    "\n",
    "## Evaluation Metric - Overlap Concept in this competition\n",
    "\n",
    "### 1. As per the Evaluation page - \"If the overlap between the ground truth and prediction is >= 0.5, and the overlap between the prediction and the ground truth >= 0.5, the prediction is a match and considered a true positive. If multiple matches exist, the match with the highest pair of overlaps is taken.\"\n",
    "\n",
    "The **\"overlap between the ground truth and prediction\"** is a measure of how many words in the ground truth match the predicted words. It is calculated as the number of words that appear in both the ground truth and the prediction divided by the total number of words in the ground truth. \n",
    "\n",
    "For example, if the ground truth for a sample contains 10 words and the model predicts 8 of those words correctly, the overlap between the ground truth and prediction would be 0.8 or 80%.\n",
    "\n",
    "On the other hand, the **\"overlap between the prediction and the ground truth\"** is a measure of how many words in the prediction match the words in the ground truth. It is calculated as the number of words that appear in both the ground truth and the prediction divided by the total number of words in the prediction. \n",
    "\n",
    "For example, if the model predicts 12 words for a sample and 10 of those words match the words in the ground truth, the overlap between the prediction and ground truth would be 0.83 or 83%.\n",
    "\n",
    "Example:\n",
    "Ground truth: 1 2 3 4 5\n",
    "Prediction: 1 2 3\n",
    "\n",
    "Common indices: 1 2 3 (3 common indices)\n",
    "\n",
    "- overlap between the ground truth and prediction: 3 common indices / 5 ground truth indices = 0.6 (>= 0.5)\n",
    "\n",
    "- overlap between the prediction and the ground truth: 3 common indices / 3 prediction indices = 1.0 (>= 0.5)\n",
    "\n",
    "Since both overlaps are greater than or equal to 0.5, this prediction is considered a match (true positive).\n",
    "\n",
    "### 2. In both, the numerator is the size of the intersection. Both calculations have to be at least 0.5 for the prediction to be considered a hit.\n",
    "\n",
    "These two measures are used together to determine whether a prediction is a true positive or not. \n",
    "\n",
    "By using both measures, the evaluation metric ensures that the predicted words are not only present in the ground truth, but also that the ground truth words are correctly identified by the model.\n",
    "\n",
    "In some cases, there might be multiple matches (multiple predictions with an overlap >= 0.5). If this happens, the competition rules state that the match with the highest pair of overlaps is considered.\n",
    "\n",
    "### 3. \"If multiple matches exist, the match with the highest pair of overlaps is taken\" - \n",
    "\n",
    "This statement means that if there are several predictions that match a single ground truth, only the prediction with the highest overlaps (for both ground truth and prediction) will be considered a true positive.\n",
    "\n",
    "Example:\n",
    "Ground truth: 1 2 3 4 5\n",
    "Prediction 1: 1 2 3\n",
    "Prediction 2: 1 2 3 4\n",
    "\n",
    "In this example, both predictions match the ground truth. However, Prediction 2 has a higher overlap and will be considered the true positive. Prediction 1 will not be considered.\n",
    "\n",
    "### 4. \"Any unmatched ground truths are false negatives and any unmatched predictions are false positives.\"\n",
    "\n",
    "\n",
    "This statement means that any ground truth without a corresponding matching prediction is considered a false negative (missed correct prediction), and any prediction without a corresponding matching ground truth is considered a false positive (incorrect prediction).\n",
    "\n",
    "Example:\n",
    "Ground truth: 1 2 3 4 5\n",
    "Prediction: 1 2\n",
    "\n",
    "Since the overlaps are not >= 0.5 for both ground truth and prediction, this prediction is considered a false positive. And since there's no match for the ground truth, it's considered a false negative.\n",
    "\n",
    "A basic implementation of the above concept will like below \n",
    "\n",
    "### Below code is just for clarification of the concept, as for implementations for this project, I will use a slightly different version of this code later.\n",
    "\n",
    "```py\n",
    "\n",
    "def calculate_overlap(ground_truth, prediction):\n",
    "    ground_truth_set = set(ground_truth)\n",
    "    prediction_set = set(prediction)\n",
    "    \n",
    "    intersection = ground_truth_set.intersection(prediction_set)\n",
    "    overlap_ground_truth = len(intersection) / len(ground_truth_set)\n",
    "    overlap_prediction = len(intersection) / len(prediction_set)\n",
    "    \n",
    "    return overlap_ground_truth, overlap_prediction\n",
    "\n",
    "def evaluate_overlap(ground_truth, prediction):\n",
    "    overlap_ground_truth, overlap_prediction = calculate_overlap(ground_truth, prediction)\n",
    "    \n",
    "    if overlap_ground_truth >= 0.5 and overlap_prediction >= 0.5:\n",
    "        return \"True Positive\"\n",
    "    elif overlap_ground_truth < 0.5:\n",
    "        return \"False Negative\"\n",
    "    elif overlap_prediction < 0.5:\n",
    "        return \"False Positive\"\n",
    "\n",
    "# Example usage\n",
    "ground_truth = [1, 2, 3, 4, 5]\n",
    "prediction = [1, 2, 3]\n",
    "\n",
    "result = evaluate_overlap(ground_truth, prediction)\n",
    "print(result)  # Output: True Positive\n",
    "\n",
    "\n",
    "```"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "5fcaf40c",
   "metadata": {
    "papermill": {
     "duration": 0.04344,
     "end_time": "2022-01-30T05:43:26.613564",
     "exception": false,
     "start_time": "2022-01-30T05:43:26.570124",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0a9966d9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:43:26.696428Z",
     "iopub.status.busy": "2022-01-30T05:43:26.695589Z",
     "iopub.status.idle": "2022-01-30T05:43:34.642676Z",
     "shell.execute_reply": "2022-01-30T05:43:34.641993Z",
     "shell.execute_reply.started": "2022-01-30T04:26:07.405613Z"
    },
    "papermill": {
     "duration": 7.989761,
     "end_time": "2022-01-30T05:43:34.642825",
     "exception": false,
     "start_time": "2022-01-30T05:43:26.653064",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import gc\n",
    "import ast\n",
    "import time\n",
    "import wandb\n",
    "from tqdm import tqdm\n",
    "from collections import defaultdict\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "import torch\n",
    "from torch.utils.data import Dataset, DataLoader\n",
    "\n",
    "from transformers import AutoConfig, AutoTokenizer, AutoModelForTokenClassification\n",
    "\n",
    "from train import *\n",
    "from utils import *\n",
    "from const import *\n",
    "from validation import *\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "os.environ['TOKENIZERS_PARALLELISM'] = 'false'\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "807018e6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.cuda.is_available()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "16ab5c9f",
   "metadata": {
    "papermill": {
     "duration": 0.025573,
     "end_time": "2022-01-30T05:43:34.838494",
     "exception": false,
     "start_time": "2022-01-30T05:43:34.812921",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## WANDB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d75ef476",
   "metadata": {},
   "outputs": [],
   "source": [
    "initialize_wandb(project='ner', run_name=RUN_NAME, config=config)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7598e345",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:43:43.147190Z",
     "iopub.status.busy": "2022-01-30T05:43:43.146340Z",
     "iopub.status.idle": "2022-01-30T05:43:44.981490Z",
     "shell.execute_reply": "2022-01-30T05:43:44.982198Z",
     "shell.execute_reply.started": "2022-01-30T04:26:25.154969Z"
    },
    "papermill": {
     "duration": 1.882446,
     "end_time": "2022-01-30T05:43:44.982383",
     "exception": false,
     "start_time": "2022-01-30T05:43:43.099937",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# df_train_org = pd.read_csv('../input/feedback-prize-2021/train.csv')\n",
    "df_train_org = pd.read_csv(ROOT_DIR + 'train.csv')\n",
    "print(df_train_org.shape)\n",
    "display(df_train_org.head())"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "7c50a639",
   "metadata": {},
   "source": [
    "## Create new Column for plotting Length and frequency and relative position per discourse_type"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "b9a3c8c9",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train_org_copy = df_train_org.copy()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c42e8c0b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>discourse_id</th>\n",
       "      <th>discourse_start</th>\n",
       "      <th>discourse_end</th>\n",
       "      <th>discourse_text</th>\n",
       "      <th>discourse_type</th>\n",
       "      <th>discourse_type_num</th>\n",
       "      <th>predictionstring</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>423A1CA112E2</td>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>8</td>\n",
       "      <td>229</td>\n",
       "      <td>Modern humans today are always on their phone....</td>\n",
       "      <td>Lead</td>\n",
       "      <td>Lead 1</td>\n",
       "      <td>1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>423A1CA112E2</td>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>230</td>\n",
       "      <td>312</td>\n",
       "      <td>They are some really bad consequences when stu...</td>\n",
       "      <td>Position</td>\n",
       "      <td>Position 1</td>\n",
       "      <td>45 46 47 48 49 50 51 52 53 54 55 56 57 58 59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>423A1CA112E2</td>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>313</td>\n",
       "      <td>401</td>\n",
       "      <td>Some certain areas in the United States ban ph...</td>\n",
       "      <td>Evidence</td>\n",
       "      <td>Evidence 1</td>\n",
       "      <td>60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>423A1CA112E2</td>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>402</td>\n",
       "      <td>758</td>\n",
       "      <td>When people have phones, they know about certa...</td>\n",
       "      <td>Evidence</td>\n",
       "      <td>Evidence 2</td>\n",
       "      <td>76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 9...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>423A1CA112E2</td>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>759</td>\n",
       "      <td>886</td>\n",
       "      <td>Driving is one of the way how to get around. P...</td>\n",
       "      <td>Claim</td>\n",
       "      <td>Claim 1</td>\n",
       "      <td>139 140 141 142 143 144 145 146 147 148 149 15...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             id  discourse_id  discourse_start  discourse_end  \\\n",
       "0  423A1CA112E2  1.622630e+12                8            229   \n",
       "1  423A1CA112E2  1.622630e+12              230            312   \n",
       "2  423A1CA112E2  1.622630e+12              313            401   \n",
       "3  423A1CA112E2  1.622630e+12              402            758   \n",
       "4  423A1CA112E2  1.622630e+12              759            886   \n",
       "\n",
       "                                      discourse_text discourse_type  \\\n",
       "0  Modern humans today are always on their phone....           Lead   \n",
       "1  They are some really bad consequences when stu...       Position   \n",
       "2  Some certain areas in the United States ban ph...       Evidence   \n",
       "3  When people have phones, they know about certa...       Evidence   \n",
       "4  Driving is one of the way how to get around. P...          Claim   \n",
       "\n",
       "  discourse_type_num                                   predictionstring  \n",
       "0             Lead 1  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1...  \n",
       "1         Position 1       45 46 47 48 49 50 51 52 53 54 55 56 57 58 59  \n",
       "2         Evidence 1    60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75  \n",
       "3         Evidence 2  76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 9...  \n",
       "4            Claim 1  139 140 141 142 143 144 145 146 147 148 149 15...  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train_org_copy.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e819327d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>discourse_id</th>\n",
       "      <th>discourse_text</th>\n",
       "      <th>discourse_type</th>\n",
       "      <th>predictionstring</th>\n",
       "      <th>discourse_len</th>\n",
       "      <th>pred_len</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>Modern humans today are always on their phone....</td>\n",
       "      <td>Lead</td>\n",
       "      <td>1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1...</td>\n",
       "      <td>44</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>They are some really bad consequences when stu...</td>\n",
       "      <td>Position</td>\n",
       "      <td>45 46 47 48 49 50 51 52 53 54 55 56 57 58 59</td>\n",
       "      <td>15</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>Some certain areas in the United States ban ph...</td>\n",
       "      <td>Evidence</td>\n",
       "      <td>60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75</td>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>When people have phones, they know about certa...</td>\n",
       "      <td>Evidence</td>\n",
       "      <td>76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 9...</td>\n",
       "      <td>63</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.622630e+12</td>\n",
       "      <td>Driving is one of the way how to get around. P...</td>\n",
       "      <td>Claim</td>\n",
       "      <td>139 140 141 142 143 144 145 146 147 148 149 15...</td>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   discourse_id                                     discourse_text  \\\n",
       "0  1.622630e+12  Modern humans today are always on their phone....   \n",
       "1  1.622630e+12  They are some really bad consequences when stu...   \n",
       "2  1.622630e+12  Some certain areas in the United States ban ph...   \n",
       "3  1.622630e+12  When people have phones, they know about certa...   \n",
       "4  1.622630e+12  Driving is one of the way how to get around. P...   \n",
       "\n",
       "  discourse_type                                   predictionstring  \\\n",
       "0           Lead  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1...   \n",
       "1       Position       45 46 47 48 49 50 51 52 53 54 55 56 57 58 59   \n",
       "2       Evidence    60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75   \n",
       "3       Evidence  76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 9...   \n",
       "4          Claim  139 140 141 142 143 144 145 146 147 148 149 15...   \n",
       "\n",
       "   discourse_len  pred_len  \n",
       "0             44        44  \n",
       "1             15        15  \n",
       "2             16        16  \n",
       "3             63        63  \n",
       "4             24        24  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train_org_copy[\"discourse_len\"] = df_train_org_copy[\"discourse_text\"].apply(lambda x: len(x.split()))\n",
    "df_train_org_copy[\"pred_len\"] = df_train_org_copy[\"predictionstring\"].apply(lambda x: len(x.split()))\n",
    "\n",
    "cols_to_display = ['discourse_id', 'discourse_text', 'discourse_type','predictionstring', 'discourse_len', 'pred_len']\n",
    "\n",
    "df_train_org_copy[cols_to_display].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "18dfada1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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PHjCaNGiRVZdT09PK3GZ8HMS/4d0/GPYp08fa/2pU6dMsWLFUoynbdu25vbt29Y2CeOP/9mVZCWMDh8+bLJnz56oPYfDYZo2bZrktXb9+nVTuHDhFONJmJhISlhYmFXfycnJnDhxwlberVs3q7xhw4bW+rNnz5rSpUsnu28nJyfz3nvv2dpKeP0nPB4vvfRSmvt1v5/F+MmNpF7ZsmW757FLah8JE0bGGHPlyhXbd5qXl5e5efPmQ48xMjLSFCxYMNn6pUqVstWfPHmycXJySra+r69voj9KPIyEUXLfHQnPZVKv+N/D93MNplZKCaNvvvnGWu/u7m4uXLhg2zZ+Qin+d0j8Y1C9enXb/+fjXh4eHua3336ztbd+/XqTOXPmFM/TmjVr7qufAP4+3JIGALgv8W9HK1u2rCpXrqz69etr6dKlVnn//v2tOs8884x+++03SdK3336rjz76SC4uLpKkr7/+2qpXpEgRValSRZK0fv169evXT7GxsZKkypUrq3Hjxrpy5Ypmz56tc+fOae/everevbt+/vnnJOPcsGGDPD091bVrV+XMmVM7duxQhgwZ5HA4lC9fPlWuXFk5c+aUv7+/bt++rT/++EPffPON7ty5o19++UXfffed2rdvL+nunE0TJkyw2s6aNat69OihK1eu6PPPP9etW7eSjOFh9CMla9euVYUKFdSoUSOtXLlS69atkyQdOHBACxcuVMeOHdPcZkp27Nih559/Xl5eXvroo490+/Zt3bhxQy1btpSzs7P69OmjW7du6bPPPpMknT9/XjNmzNArr7ySZHs//fST6tSpoxo1amjdunUKCwuTJB06dEgvv/yyPv/8c0mP9npIydixYzV//nxruXLlymrYsKEiIiL0zTffSJIiIiLUpUsX/frrr8qfP78mTZqkn3/+WStWrJAk+fv769VXX5UkBQUFpbi/mjVrKkOGDIqJidG1a9e0fft2VapUyfr8xFmzZo369u2r2NhY65xLUp06daz3Xbp0sc0z9vTTT6to0aJasWKFNmzYIEn67rvvNHbsWL3++utJxvPbb7+pWLFiatGihYwx1vHq16+fTp8+bdVr0aKFypQpo6VLl2rJkiVJtrVy5Urt27dPkuTu7q5evXopZ86cOn36tA4ePKjVq1eneGzi9zE4OFhHjhxRbGys5s6dqyFDhkiSrl+/roUL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tgYOHJhineDgYL333nt/SzwAAAAAAODxQMLoH6xnz55yOByJXo0bN07V9t9//73eeOONRxwlAAAAAAD4t3FO7wCQssaNG2vmzJm2dW5ubqnaNiAg4FGEBAAAAAAA/uUYYfQP5+bmpuzZs9te/v7+6ty5szp06GCre/v2bWXOnFlz5syRlPiWtLNnz6pFixby8PBQ3rx59eWXXyba36VLl/Tcc88pS5Ys8vHxUd26dbVz506rfNSoUSpdurS++OILBQcHy9fXVx07dtSVK1esOrGxsZo4caIKFCggNzc35c6dW2+99ZZVfvz4cbVv315+fn4KCAhQy5YtdeTIkYd0xAAAAAAAwIMiYfSY6tKli3788UdFR0db65YvX65r166pdevWSW7Ts2dPHT9+XCtXrtS3336rqVOn6uzZs7Y67dq109mzZ7V06VJt27ZNZcuWVb169XThwgWrTmRkpBYuXKjFixdr8eLFWr16tcaPH2+VjxgxQuPHj9fIkSO1d+9effXVV8qWLZuku0mtRo0aydvbW7/99pvWrVsnLy8vNW7cWLdu3Uq2vzdv3lRUVJTtBQAAAAAAHg0SRv9wixcvlpeXl+01duxYNWrUSBkzZtSCBQusul999ZWeeuopeXt7J2pn//79Wrp0qT799FNVrlxZ5cqV04wZM3T9+nWrztq1a7V582Z98803Kl++vAoWLKi3335bfn5++vbbb616sbGxmjVrlooXL64aNWqoW7duCgsLkyRduXJF77//viZOnKgePXoof/78ql69up577jlJ0rx58xQbG6vPPvtMJUqUUEhIiGbOnKljx45p1apVyR6HcePGydfX13oFBQU96KEFAAAAAADJYA6jf7g6depo2rRptnUBAQFydnZW+/bt9eWXX6pbt266evWqFi1apLlz5ybZTkREhJydnVWuXDlrXZEiReTn52ct79y5U9HR0cqUKZNt2+vXrysyMtJaDg4OtiWlcuTIYY1UioiI0M2bN1WvXr0k49i5c6cOHjyYKKl148YN2z4SGjFihAYPHmwtR0VFkTQCAAAAAOARIWH0D5cxY0YVKFAgybIuXbqoVq1aOnv2rFasWCEPD49UP0EtKdHR0cqRI0eSI33iJ5ZcXFxsZQ6HQ7GxsZIkDw+Pe+6jXLlySc6flCVLlmS3c3NzS/Vk3wAAAAAA4MGQMHqMVa1a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/f3l6empJk2a6MCBA9Z2R48eVYsWLeTv76+MGTOqWLFiWrJkiST7LWmrVq3SM888o8uXL1ujmUaNGiUp8S1px44dU8uWLeXl5SUfHx+1b99eZ86cscpHjRql0qVL64svvlBwcLB8fX3VsWNHXbly5W85VgAAAAAA4N5IGP0LeXh46NatW+rZs6e2bt2qH374QRs2bJAxRk2bNtXt27clSX379tXNmze1Zs0a7dq1SxMmTJCXl1ei9qpWrar33ntPPj4+OnXqlE6dOqWhQ4cmqhcbG6uWLVvqwoULWr16tVasWKFDhw6pQ4cOtnqRkZFauHChFi9erMWLF2v16tUaP358in26efOmoqKibC8AAAAAAPBocEvav4gxRmFhYVq+fLmaNGmihQsXat26dapataok6csvv1RQUJAWLlyodu3a6dixY2rbtq1KlCghScqXL1+S7bq6usrX11cOhyPF29TCwsK0a9cuHT58WEFBQZKkOXPmqFixYtqyZYsqVKgg6W5iadasWfL29pYkdevWTWFhYXrrrbeSbXvcuHEaPXp02g8KAAAAAABIM0YY/QssXrxYXl5ecnd3V5MmTdShQwf17NlTzs7OqlSpklUvU6ZMKly4sCIiIiRJAwYM0Jtvvqlq1aopNDRUv//++wPFERERoaCgICtZJElFixaVn5+ftU/p7m1scckiScqRI4fOnj2bYtsjRozQ5cuXrdfx48cfKFYAAAAAAJA8Ekb/AnXq1FF4eLgOHDig69eva/bs2XI4HPfc7rnnntOhQ4fUrVs37dq1S+XLl9eHH374yON1cXGxLTscDsXGxqa4jZubm3x8fGwvAAAAAADwaJAw+hfImDGjChQooNy5c8vZ+e5dhiEhIbpz5442bdpk1Tt//rz27dunokWLWuuCgoLUu3dvff/99xoyZIg+/fTTJPfh6uqqmJiYFOMICQnR8ePHbaN/9u7dq0uXLtn2CQAAAAAA/tlIGP1LFSxYUC1bttTzzz+vtWvXaufOnerataty5sypli1bSpIGDhyo5cuX6/Dhw9q+fbtWrlypkJCQJNsLDg5WdHS0wsLCdO7cOV27di1Rnfr166tEiRLq0qWLtm/frs2bN6t79+6qVauWypcv/0j7CwAAAAAAHh4SRv9iM2fOVLly5dS8eXNVqVJFxhgtWbLEuiUsJiZGffv2VUhIiBo3bqxChQpp6tSpSbZVtWpV9e7dWx06dFCWLFk0ceLERHUcDocWLVokf39/1axZU/Xr11e+fPk0b968R9pPAAAAAADwcDmMMSa9gwDSKioqSr6+vgoaOF9Obp7pHQ7wRDoyvll6hwAAAAAgDeJ+S1++fPmecwMzwggAAAAAAAA2JIwAAAAAAABgQ8IIAAAAAAAANs7pHQDwIHaPbnTP+y4BAAAAAEDaMMIIAAAAAAAANiSMAAAAAAAAYEPCCAAAAAAAADYkjAAAAAAAAGBDwggAAAAAAAA2JIwAAAAAAABgQ8IIAAAAAAAANiSMAAAAAAAAYEPCCAAAAAAAADbO6R0AcD+MMZKkqKiodI4EAAAAAIDHQ9xv6Ljf1CkhYYTH0vnz5yVJQUFB6RwJAAAAAACPlytXrsjX1zfFOiSM8FgKCAiQJB07duyeFzn+naKiohQUFKTjx4/Lx8cnvcPB34zzD64BcA2AawBcA082zv/9McboypUrCgwMvGddEkZ4LDk53Z1+y9fXly+HJ5yPjw/XwBOM8w+uAXANgGsAXANPNs5/2qV20AWTXgMAAAAAAMCGhBEAAAAAAABsSBjhseTm5qbQ0FC5ubmldyhIJ1wDTzbOP7gGwDUArgFwDTzZOP+PnsOk5llqAAAAAAAAeGIwwggAAAAAAAA2JIwAAAAAAABgQ8IIAAAAAAAANiSMAAAAAAAAYEPCCI+dKVOmKDg4WO7u7qpUqZI2b96c3iHhEVmzZo1atGihwMBAORwOLVy40FZujNHrr7+uHDlyyMPDQ/Xr19eBAwfSJ1g8EuPGjVOFChXk7e2trFmzqlWrVtq3b5+tzo0bN9S3b19lypRJXl5eatu2rc6cOZNOEeNhmzZtmkqWLCkfHx/5+PioSpUqWrp0qVXO+X+yjB8/Xg6HQwMHDrTWcQ38u40aNUoOh8P2KlKkiFXO+X8y/Pnnn+ratasyZcokDw8PlShRQlu3brXK+Tfhv1twcHCi7wGHw6G+fftK4nvgUSJhhMfKvHnzNHjwYIWGhmr79u0qVaqUGjVqpLNnz6Z3aHgErl69qlKlSmnKlClJlk+cOFEffPCBPv74Y23atEkZM2ZUo0aNdOPGjb85Ujwqq1evVt++fbVx40atWLFCt2/fVsOGDXX16lWrzqBBg/Tjjz/qm2++0erVq3Xy5Em1adMmHaPGw5QrVy6NHz9e27Zt09atW1W3bl21bNlSe/bskcT5f5Js2bJFn3zyiUqWLGlbzzXw71esWDGdOnXKeq1du9Yq4/z/+128eFHVqlWTi4uLli5dqr179+qdd96Rv7+/VYd/E/67bdmyxfYdsGLFCklSu3btJPE98EgZ4DFSsWJF07dvX2s5JibGBAYGmnHjxqVjVPg7SDILFiywlmNjY0327NnNpEmTrHWXLl0ybm5u5uuvv06HCPF3OHv2rJFkVq9ebYy5e85dXFzMN998Y9WJiIgwksyGDRvSK0w8Yv7+/uazzz7j/D9Brly5YgoWLGhWrFhhatWqZV566SVjDN8BT4LQ0FBTqlSpJMs4/0+Gl19+2VSvXj3Zcv5N+OR56aWXTP78+U1sbCzfA48YI4zw2Lh165a2bdum+vXrW+ucnJxUv359bdiwIR0jQ3o4fPiwTp8+bbsefH19ValSJa6Hf7HLly9LkgICAiRJ27Zt0+3bt23XQZEiRZQ7d26ug3+hmJgYzZ07V1evXlWVKlU4/0+Qvn37qlmzZrZzLfEd8KQ4cOCAAgMDlS9fPnXp0kXHjh2TxPl/Uvzwww8qX7682rVrp6xZs6pMmTL69NNPrXL+TfhkuXXrlv73v//p2WeflcPh4HvgESNhhMfGuXPnFBMTo2zZstnWZ8uWTadPn06nqJBe4s4518OTIzY2VgMHDlS1atVUvHhxSXevA1dXV/n5+dnqch38u+zatUteXl5yc3NT7969tWDBAhUtWpTz/4SYO3eutm/frnHjxiUq4xr496tUqZJmzZqlZcuWadq0aTp8+LBq1KihK1eucP6fEIcOHdK0adNUsGBBLV++XC+++KIGDBig2bNnS+LfhE+ahQsX6tKlS+rZs6ck/j/wqDmndwAAAKRG3759tXv3btvcFXgyFC5cWOHh4bp8+bK+/fZb9ejRQ6tXr07vsPA3OH78uF566SWtWLFC7u7u6R0O0kGTJk2s9yVLllSlSpWUJ08ezZ8/Xx4eHukYGf4usbGxKl++vMaOHStJKlOmjHbv3q2PP/5YPXr0SOfo8HebMWOGmjRposDAwPQO5YnACCM8NjJnzqwMGTIkmvH+zJkzyp49ezpFhfQSd865Hp4M/fr10+LFi7Vy5UrlypXLWp89e3bdunVLly5dstXnOvh3cXV1VYECBVSuXDmNGzdOpUqV0vvvv8/5fwJs27ZNZ8+eVdmyZeXs7CxnZ2etXr1aH3zwgZydnZUtWzaugSeMn5+fChUqpIMHD/Id8ITIkSOHihYtalsXEhJi3ZrIvwmfHEePHtUvv/yi5557zlrH98CjRcIIjw1XV1eVK1dOYWFh1rrY2FiFhYWpSpUq6RgZ0kPevHmVPXt22/UQFRWlTZs2cT38ixhj1K9fPy1YsEC//vqr8ubNaysvV66cXFxcbNfBvn37dOzYMa6Df7HY2FjdvHmT8/8EqFevnnbt2qXw8HDrVb58eXXp0sV6zzXwZImOjlZkZKRy5MjBd8ATolq1atq3b59t3f79+5UnTx5J/JvwSTJz5kxlzZpVzZo1s9bxPfBocUsaHiuDBw9Wjx49VL58eVWsWFHvvfeerl69qmeeeSa9Q8MjEB0drYMHD1rLhw8fVnh4uAICApQ7d24NHDhQb775pgoWLKi8efNq5MiRCgwMVKtWrdIvaDxUffv21VdffaVFixbJ29vbuhfd19dXHh4e8vX1Va9evTR48GAFBATIx8dH/fv3V5UqVVS5cuV0jh4Pw4gRI9SkSRPlzp1bV65c0VdffaVVq1Zp+fLlnP8ngLe3tzVnWZyMGTMqU6ZM1nqugX+3oUOHqkWLFsqTJ49Onjyp0NBQZciQQZ06deI74AkxaNAgVa1aVWPHjlX79u21efNmTZ8+XdOnT5ckORwO/k34BIiNjdXMmTPVo0cPOTv/XxqD74FHLL0f0wak1Ycffmhy585tXF1dTcWKFc3GjRvTOyQ8IitXrjSSEr169OhhjLn7GNWRI0eabNmyGTc3N1OvXj2zb9++9A0aD1VS51+SmTlzplXn+vXrpk+fPsbf3994enqa1q1bm1OnTqVf0Hionn32WZMnTx7j6upqsmTJYurVq2d+/vlnq5zz/+SpVauWeemll6xlroF/tw4dOpgcOXIYV1dXkzNnTtOhQwdz8OBBq5zz/2T48ccfTfHixY2bm5spUqSImT59uq2cfxP++y1fvtxISvK88j3w6DiMMSZ9UlUAAAAAAAD4J2IOIwAAAAAAANiQMAIAAAAAAIANCSMAAAAAAADYkDACAAAAAACADQkjAAAAAAAA2JAwAgAAAAAAgA0JIwAAAAAAANiQMAIAAMAjdeTIETkcDoWHh6d3KJY//vhDlStXlru7u0qXLp3e4djMmjVLfn5+6R0GAOAJR8IIAAA8sTZs2KAMGTKoWbNm6R0K/mahoaHKmDGj9u3bp7CwsPQOBwCAfxwSRgAA4Ik1Y8YM9e/fX2vWrNHJkycf6b6MMbpz584j3ceT5tatW/e9bWRkpKpXr648efIoU6ZMDzGq1HuQ+AEAeNRIGAEAgCdSdHS05s2bpxdffFHNmjXTrFmzrLLOnTurQ4cOtvq3b99W5syZNWfOHElSbGysxo0bp7x588rDw0OlSpXSt99+a9VftWqVHA6Hli5dqnLlysnNzU1r165VZGSkWrZsqWzZssnLy0sVKlTQL7/8YtvXqVOn1KxZM3l4eChv3rz66quvFBwcrPfee8+qc+nSJT333HPKkiWLfHx8VLduXe3cuTPZ/sbdFvb999+rTp068vT0VKlSpbRhwwarzqhRoxLdnvXee+8pODjYWu7Zs6datWqlsWPHKlu2bPLz89OYMWN0584dDRs2TAEBAcqVK5dmzpyZKIY//vhDVatWlbu7u4oXL67Vq1fbynfv3q0mTZrIy8tL2bJlU7du3XTu3DmrvHbt2urXr58GDhyozJkzq1GjRkn2NTY2VmPGjFGuXLnk5uam0qVLa9myZVa5w+HQtm3bNGbMGDkcDo0aNSpRG4sXL5afn59iYmIkSeHh4XI4HHrllVesOs8995y6du1qLX/33XcqVqyY3NzcFBwcrHfeecfWZnBwsN544w11795dPj4+euGFFyTdvQUtd+7c8vT0VOvWrXX+/Hnbdjt37lSdOnXk7e0tHx8flStXTlu3bk2y7wAAPCwkjAAAwBNp/vz5KlKkiAoXLqyuXbvq888/lzFGktSlSxf9+OOPio6OtuovX75c165dU+vWrSVJ48aN05w5c/Txxx9rz549GjRokLp27ZooCfLKK69o/PjxioiIUMmSJRUdHa2mTZsqLCxMO3bsUOPGjdWiRQsdO3bM2qZ79+46efKkVq1ape+++07Tp0/X2bNnbe22a9dOZ8+e1dKlS7Vt2zaVLVtW9erV04ULF1Ls93//+18NHTpU4eHhKlSokDp16pTmkU+//vqrTp48qTVr1ujdd99VaGiomjdvLn9/f23atEm9e/fWf/7zH504ccK23bBhwzRkyBDt2LFDVapUUYsWLazkyKVLl1S3bl2VKVNGW7du1bJly3TmzBm1b9/e1sbs2bPl6uqqdevW6eOPP04yvvfff1/vvPOO3n77bf3+++9q1KiRnnrqKR04cEDS3YRcsWLFNGTIEJ06dUpDhw5N1EaNGjV05coV7dixQ5K0evVqZc6cWatWrbLqrF69WrVr15Ykbdu2Te3bt1fHjh21a9cujRo1SiNHjrQlIiXp7bffVqlSpbRjxw6NHDlSmzZtUq9evdSvXz+Fh4erTp06evPNN23bdOnSRbly5dKWLVu0bds2vfLKK3JxcUn5JAEA8KAMAADAE6hq1armvffeM8YYc/v2bZM5c2azcuVK2/KcOXOs+p06dTIdOnQwxhhz48YN4+npadavX29rs1evXqZTp07GGGNWrlxpJJmFCxfeM5ZixYqZDz/80BhjTEREhJFktmzZYpUfOHDASDKTJ082xhjz22+/GR8fH3Pjxg1bO/nz5zeffPJJkvs4fPiwkWQ+++wza92ePXuMJBMREWGMMSY0NNSUKlXKtt3kyZNNnjx5rOUePXqYPHnymJiYGGtd4cKFTY0aNazlO3fumIwZM5qvv/7atu/x48dbdW7fvm1y5cplJkyYYIwx5o033jANGza07fv48eNGktm3b58xxphatWqZMmXKJNm/+AIDA81bb71lW1ehQgXTp08fa7lUqVImNDQ0xXbKli1rJk2aZIwxplWrVuatt94yrq6u5sqVK+bEiRNGktm/f78xxpjOnTubBg0a2LYfNmyYKVq0qLWcJ08e06pVK1udTp06maZNm9rWdejQwfj6+lrL3t7eZtasWSl3GgCAh4wRRgAA4Imzb98+bd68WZ06dZIkOTs7q0OHDpoxY4a13L59e3355ZeSpKtXr2rRokXq0qWLJOngwYO6du2aGjRoIC8vL+s1Z84cRUZG2vZVvnx523J0dLSGDh2qkJAQ+fn5ycvLSxEREdYIo3379snZ2Vlly5a1tilQoID8/f2t5Z07dyo6OlqZMmWy7f/w4cOJ9p9QyZIlrfc5cuSQpESjl+6lWLFicnL6v39GZsuWTSVKlLCWM2TIoEyZMiVqt0qVKtZ7Z2dnlS9fXhEREVafVq5caetPkSJFJMnWp3LlyqUYW1RUlE6ePKlq1arZ1lerVs3aV2rVqlVLq1atkjFGv/32m9q0aaOQkBCtXbtWq1evVmBgoAoWLChJioiISHKfBw4csG5rkxJfDxEREapUqZJtXfzjJEmDBw/Wc889p/r162v8+PH3PMcAADwMzukdAAAAwN9txowZunPnjgIDA611xhi5ubnpo48+kq+vr7p06aJatWrp7NmzWrFihTw8PNS4cWNJsm5V++mnn5QzZ05b225ubrbljBkz2paHDh2qFStW6O2331aBAgXk4eGhp59+Ok0TIEdHRytHjhy226Pi3Otx7PFvZXI4HJLuzvkjSU5OTtZteXFu376dYhtx7SS1Lq7d1IiOjlaLFi00YcKERGVxiS0p8fF8lGrXrq3PP/9cO3fulIuLi4oUKaLatWtr1apVunjxomrVqpXmNu8n/lGjRqlz58766aeftHTpUoWGhmru3LnW7ZEAADwKJIwAAMAT5c6dO5ozZ47eeecdNWzY0FbWqlUrff311+rdu7eqVq2qoKAgzZs3T0uXLlW7du2spEjRokXl5uamY8eOpTlpsG7dOvXs2dP6sR8dHa0jR45Y5YULF9adO3e0Y8cOazTNwYMHdfHiRatO2bJldfr0aTk7O9smpH5QWbJk0enTp2WMsZJJ4eHhD639jRs3qmbNmpLunodt27apX79+ku726bvvvlNwcLCcne//n6g+Pj4KDAzUunXrbOdm3bp1qlixYpraipvHaPLkyVZbtWvX1vjx43Xx4kUNGTLEqhsSEqJ169bZtl+3bp0KFSqkDBkyJLuPkJAQbdq0ybZu48aNieoVKlRIhQoV0qBBg9SpUyfNnDmThBEA4JHiljQAAPBEWbx4sS5evKhevXqpePHitlfbtm2t29Kku09L+/jjj7VixQrrdjRJ8vb21tChQzVo0CDNnj1bkZGR2r59uz788EPNnj07xf0XLFhQ33//vcLDw7Vz50517tzZNhKnSJEiql+/vl544QVt3rxZO3bs0AsvvCAPDw8riVO/fn1VqVJFrVq10s8//6wjR45o/fr1+u9///tAT8+qXbu2/vrrL02cOFGRkZGaMmWKli5det/tJTRlyhQtWLBAf/zxh/r27auLFy/q2WeflST17dtXFy5cUKdOnbRlyxZFRkZq+fLleuaZZ2y3dKXGsGHDNGHCBM2bN0/79u3TK6+8ovDwcL300ktpasff318lS5bUl19+aU1uXbNmTW3fvl379++3JaSGDBmisLAwvfHGG9q/f79mz56tjz76KMkJteMbMGCAli1bprffflsHDhzQRx99ZHui2/Xr19WvXz+tWrVKR48e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/vnnTfbs2Y2rq6spUqSImT59eqr3ZYwxM2bMMO3atTNFihSxrjFvb29TqlQpM3z48CTPUWqvo4TXX0ouX75sxo4daypWrGh8fHyMi4uLCQoKMj169LB9HuPcvn3bTJ482VSuXNn4+vqaDBkymICAAFO0aFHTrVs38/XXX9vq//7776ZLly4mT548xtXV1bi7u5ugoCBTp04d88orr5gTJ05YdQ8dOmReeuklU716dZMrVy7j6elpXF1dTWBgoGnevLn54YcfrLr3e70ZY8yiRYtMo0aNTNasWa3jni9fPtOyZUszduxYExMTk+rjBwAJkTACAPyrPGjCqEaNGrbluITR2bNnTenSpZNNODg5OZn33nvP1vatW7dMtWrVkqzfokWLh54wunbtmqlfv36KiZHBgwen2F716tWT3K5mzZqJjt3o0aONw+FIdl8LFiwwxhgzadIka11gYKC5c+eOrZ34PxwnTpyY4vmKM3nyZNsPrIQvX19f2zF91AkjY4z55ptvbHVeeOGFZLePc/36dVO4cOEUY3v55Zdt+/nss8+Mq6trsvUnT55s1Y2OjjY1a9ZMsf3q1aubK1euWNs8rIRRws9SXMKodu3aKcbToUMH2/4WLlxoPD09k62fM2dOs3fv3nuew6QklzAyxphmzZpZZe3atbOVJUz4bt68OcljULdu3SRjrlChgrl+/bqtzVdffTXF41KjRg0THR2dqn6lNmGUL18+kyNHjiT3N2PGjFQfx3LlyqUYe86cOc2ff/5p2+ZhJ4z2799vgoODk43Bzc3NzJ8/37ZN/GOR1KtSpUpW3T179qR4HUqyJTt//PHHe37vjB492qp/P9dbwu+VpF4JrzMASAtuSQMA/KstW7YsyYmIO3TooKCgoETrf/vtN1WqVEkNGjTQ1atXlTt3bklSt27dFB4eLkny9vZW586dlStXLq1bt07Lli1TbGysBg0apPLly6tatWqS7t7yFH/OnDJlyqh58+bavXu3FixY8ND7OmjQIP3yyy+SJFdXV3Xs2FEFCxbUrl279M0338gYo3fffVflypVT586dk2xj7dq1qlevnqpWraqFCxdq165dkqQ1a9Zo48aNqly5siTpm2++UWhoqLWdp6enOnbsqDx58ujw4cP68ccfrbJevXopNDRU165d08mTJ/XTTz/pqaeekiRt3rzZulXM2dlZ3bp1u2c/16xZo8GDB8sYI0nKnTu3OnXqpOjoaM2cOVPXrl3T5cuX1bZtWx08eFD+/v6aNGmSIiMj9fHHH1vtvPrqq/L390/18b2XNm3ayN/fXxcvXpQkrVy58p7brFy5Uvv27ZMkubu7q1evXsqZM6dOnz6tgwcPavXq1bb6Gzdu1AsvvKDY2FhJd49Zu3btVKRIEZ04cULLli2z1R8wYIDWrFljLTds2FBVqlTRxo0btXz5ckl3z/mAAQP0+eef33/nk/Dbb7+pWLFiatGihYwxypAhgyIiIrRq1SpJkpOTk7p3765ChQrp3LlzOnz4sFUW5/Dhw+rUqZOuX78u6e6tfa1bt1ZsbKy+/PJLHT16VH/++afatm2rXbt2KUOGDA8t/v79++unn36SJC1atEjnzp1T5syZJd29/uMUK1ZMFSpUSLKNX3/9VS1btlSpUqW0dOlSbdmyRZK0ZcsWTZw4Ua+//rokae7cuRo7dqy1XaNGjVStWjWdOXNGs2fPVnR0tH777TcNGjRI06dPf2h9PHTokNzd3fXiiy/Kw8ND06ZNs471xIkT9eyzz6aqnaxZs6pFixbKnz+/AgIClCFDBv3555+aN2+ezp8/rz///FNvvvmmpk6d+tBijy8mJkatW7e2nqiWJUsWde7cWQEBAVq+fLnWr1+vmzdvqnv37ipXrpzy5cun6Oho/e9//7PaaNu2rcqWLavLly/r6NGjiT57s2fP1rVr1yRJuXLlUteuXZUxY0adOHFCu3fv1saNG231nZ2dVbp0aZUvX15ZsmSRj4+Prl69qnXr1lnfDW+88Yb1mb+f623atGnW+goVKqh58+a6c+eOjh8/rk2bNikiIuJhHF4AT7J0TlgBAPBQJfzrdHKvuBEiCf9C26ZNm0RD+Hfu3Gmr8+uvv9rKmzZtapW1bt3aWl+oUCFrfYECBcyNGzessueffz7JeIy5vxFG58+fN87Oztb6zz//3LZdnz59rLIyZcok217r1q1NbGys1WaGDBmssg8++MDarmzZstb6jBkzmn379tn2Fx0dbc6cOZNkf1u0aGGtHzJkSJLrU9KyZUtrG29vb9t+lixZYutP/NE2D3KrS2pGGBljTMWKFa06np6eyW4f5/vvv7fWNWrUKFF7N27csN3m0qZNG6u+k5OTWbNmja3+zZs3rdvxzp07Zzt/7du3t9Vt3769VZYhQwZz7ty5VB2n1I4MqVy5cqLRDdu3b7fKQ0JCrGstzp07d8yRI0es5UGDBln1CxUqZGvv5MmTtv4tWrQo0fG7l5RGGMXGxto+w++8845VFn9ETfz1CY/B888/b5XdunXLFCtWzCrLlSuXVVamTBlrfffu3W1xzJ8/3ypzdnY258+fv2e/UjvCSJJZuHChVfbee+/ZypK7dS4pV69eNb/88ouZPn26effdd82kSZNsn9V8+fLZ6j/MEUaLFi2yXcv79++3yu7cuWNKlChhlQ8aNMgYY8yFCxesdT4+PubmzZu2NmNjY82hQ4es5QEDBlj1x40blyiGCxcuJHnr7r59+8zcuXPNhx9+aN5++20zadIk20ilOXPmWPtL6/VWsmRJa31St64ePnyYW9IAPBAnAQAAy6uvvionJ/v/HuOPEpKkunXr2h69vWTJEqts/fr1kqQrV65o//791vq2bdvKzc3NWu7atetDjXvTpk26c+eOtfzss8/aYoz/l/3w8HDrL+UJvfjii3I4HJLuPlkp7i/ckqyRM9euXdOOHTus9XGjROLLmDGjsmbNai3379/fer9kyRKdPHlSkvTtt99a65955plU9XXDhg3W+8aNG9v206RJE2XJkiXJun8H8/9HPaVWhQoVrOti+fLlKlasmDp16qTQ0FAtXLhQt27dUs6cOa36a9eutd43atRINWrUsLXn6uqqXLlySbo7eismJsYq69Gjh61u/OWYmBht3rw5TbHfy9ChQ+Xu7m5bFxISokyZMkmSIiIiVKBAAT399NN69dVXNXfuXF28eFF58uSx6sf/7O3fv18eHh7WNR0YGGjrX9xn72FxOBzq16+ftfzZZ59Jujvqadu2bZIkFxeXFD/L8UfMubi4qH379tbyiRMndObMGV27ds0avShJc+bMsX12429z586dh3qeAgMD1bJlS2u5cOHCtvK4z/y9vPvuu8qWLZvq16+vF154QYMHD9awYcO0aNEiq86JEyceTtBJiH+dxMTEqFChQtbxc3Z2tkZKSv93nfj7+1sT0UdFRSlv3rxq1aqVhg0bpjlz5ujkyZPKmzevtV38z9prr72mqlWr6tlnn9WECRO0atUq+fj42EYsHjlyRNWqVVPhwoXVsWNH9e/fX0OHDtWwYcNs379xx+V+rrf4MTVo0EANGzZU3759NWXKFO3a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",
      "text/plain": [
       "<Figure size 1200x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import FuncFormatter\n",
    "fig = plt.figure(figsize=(12,8))\n",
    "\n",
    "ax1 = fig.add_subplot(211)\n",
    "ax1 = df_train_org_copy.groupby('discourse_type')['discourse_len'].mean().sort_values().plot(kind=\"barh\")\n",
    "ax1.set_title(\"Average number of words versus Discourse Type\", fontsize=14, fontweight = 'bold')\n",
    "ax1.set_xlabel(\"Average number of words\", fontsize = 10)\n",
    "ax1.set_ylabel(\"\")\n",
    "\n",
    "ax2 = fig.add_subplot(212)\n",
    "ax2 = df_train_org_copy.groupby('discourse_type')['discourse_type'].count().sort_values().plot(kind=\"barh\")\n",
    "ax2.get_xaxis().set_major_formatter(FuncFormatter(lambda x, p: format(int(x), ','))) #add thousands separator\n",
    "ax2.set_title(\"Frequency of Discourse Type in all essays\", fontsize=14, fontweight = 'bold')\n",
    "ax2.set_xlabel(\"Frequency\", fontsize = 10)\n",
    "ax2.set_ylabel(\"\")\n",
    "\n",
    "plt.tight_layout(pad=2)\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "d388cafd",
   "metadata": {
    "papermill": {
     "duration": 0.027395,
     "end_time": "2022-01-30T05:43:45.039679",
     "exception": false,
     "start_time": "2022-01-30T05:43:45.012284",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "Looking at the above graph, is there a correlation between the length of a discourse and the class (discourse_type)? Yes, there is. Evidence is the longest discourse type on average. \n",
    "\n",
    "When looking at the frequencies of occurence, we see that Counterclaim and Rebuttal are relatively rare\n",
    "\n",
    "-----------------------\n",
    "\n",
    "## Convert Train Text to NER Labels\n",
    "We will now convert all text words into NER labels and save in a dataframe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d2f0a108",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:43:45.105097Z",
     "iopub.status.busy": "2022-01-30T05:43:45.104206Z",
     "iopub.status.idle": "2022-01-30T05:44:09.949258Z",
     "shell.execute_reply": "2022-01-30T05:44:09.949652Z",
     "shell.execute_reply.started": "2022-01-30T04:26:26.961389Z"
    },
    "papermill": {
     "duration": 24.882656,
     "end_time": "2022-01-30T05:44:09.949811",
     "exception": false,
     "start_time": "2022-01-30T05:43:45.067155",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 136/136 [00:00<00:00, 27205.86it/s]\n",
      "100%|██████████| 136/136 [00:00<00:00, 2014.39it/s]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>text</th>\n",
       "      <th>text_split</th>\n",
       "      <th>entities</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>006FCE4404E3</td>\n",
       "      <td>Phones and driving\\n\\nHave you ever seen someo...</td>\n",
       "      <td>[Phones, and, driving, Have, you, ever, seen, ...</td>\n",
       "      <td>[O, O, O, B-Lead, I-Lead, I-Lead, I-Lead, I-Le...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>Phones and Driving\\n\\nLook around you! All you...</td>\n",
       "      <td>[Phones, and, Driving, Look, around, you!, All...</td>\n",
       "      <td>[O, O, O, B-Lead, I-Lead, I-Lead, I-Lead, I-Le...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0300455258CB</td>\n",
       "      <td>There is a lot of young teenagers and also adu...</td>\n",
       "      <td>[There, is, a, lot, of, young, teenagers, and,...</td>\n",
       "      <td>[B-Position, I-Position, I-Position, I-Positio...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0421128DEE6C</td>\n",
       "      <td>Phones &amp; Driving\\n\\nBefore cell phones were in...</td>\n",
       "      <td>[Phones, &amp;, Driving, Before, cell, phones, wer...</td>\n",
       "      <td>[O, O, O, B-Lead, I-Lead, I-Lead, I-Lead, I-Le...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>077DD935321C</td>\n",
       "      <td>Phones and Driving\\n\\nOver the last few years ...</td>\n",
       "      <td>[Phones, and, Driving, Over, the, last, few, y...</td>\n",
       "      <td>[O, O, O, B-Lead, I-Lead, I-Lead, I-Lead, I-Le...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             id                                               text  \\\n",
       "0  006FCE4404E3  Phones and driving\\n\\nHave you ever seen someo...   \n",
       "1  019328A0D7A3  Phones and Driving\\n\\nLook around you! All you...   \n",
       "2  0300455258CB  There is a lot of young teenagers and also adu...   \n",
       "3  0421128DEE6C  Phones & Driving\\n\\nBefore cell phones were in...   \n",
       "4  077DD935321C  Phones and Driving\\n\\nOver the last few years ...   \n",
       "\n",
       "                                          text_split  \\\n",
       "0  [Phones, and, driving, Have, you, ever, seen, ...   \n",
       "1  [Phones, and, Driving, Look, around, you!, All...   \n",
       "2  [There, is, a, lot, of, young, teenagers, and,...   \n",
       "3  [Phones, &, Driving, Before, cell, phones, wer...   \n",
       "4  [Phones, and, Driving, Over, the, last, few, y...   \n",
       "\n",
       "                                            entities  \n",
       "0  [O, O, O, B-Lead, I-Lead, I-Lead, I-Lead, I-Le...  \n",
       "1  [O, O, O, B-Lead, I-Lead, I-Lead, I-Lead, I-Le...  \n",
       "2  [B-Position, I-Position, I-Position, I-Positio...  \n",
       "3  [O, O, O, B-Lead, I-Lead, I-Lead, I-Lead, I-Le...  \n",
       "4  [O, O, O, B-Lead, I-Lead, I-Lead, I-Lead, I-Le...  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "input_dir = ROOT_DIR + 'train/'\n",
    "output_file = 'train_NER.csv'\n",
    "\n",
    "df_ner_texts = attach_ner_to_text(input_dir, output_file, df_train_org)\n",
    "df_ner_texts.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "e4f1338d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:44:10.027639Z",
     "iopub.status.busy": "2022-01-30T05:44:10.026841Z",
     "iopub.status.idle": "2022-01-30T05:44:10.048820Z",
     "shell.execute_reply": "2022-01-30T05:44:10.048151Z",
     "shell.execute_reply.started": "2022-01-30T04:26:50.835192Z"
    },
    "papermill": {
     "duration": 0.069918,
     "end_time": "2022-01-30T05:44:10.048935",
     "exception": false,
     "start_time": "2022-01-30T05:44:09.979017",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Check that we have created one entity/label for each word correctly\n",
    "assert (df_ner_texts['text_split'].str.len() == df_ner_texts['entities'].str.len()).all(), \"Lengths of text_split and entities do not match for all rows.\"\n",
    "\n",
    "# df_ner_texts['text_split'].str.len(): computes the length (number of words) for each list in the 'text_split' column. The .str accessor is used to perform vectorized string operations, and the .len() method computes the length of each list.\n",
    "# The .all() method checks if all the elements in the resulting boolean Series are True."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "2b5c4c05",
   "metadata": {
    "papermill": {
     "duration": 0.030318,
     "end_time": "2022-01-30T05:44:10.179690",
     "exception": false,
     "start_time": "2022-01-30T05:44:10.149372",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Train and Validation splits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a9f42f1c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:44:10.243329Z",
     "iopub.status.busy": "2022-01-30T05:44:10.242549Z",
     "iopub.status.idle": "2022-01-30T05:44:10.280864Z",
     "shell.execute_reply": "2022-01-30T05:44:10.281307Z",
     "shell.execute_reply.started": "2022-01-30T04:26:50.902671Z"
    },
    "papermill": {
     "duration": 0.07332,
     "end_time": "2022-01-30T05:44:10.281445",
     "exception": false,
     "start_time": "2022-01-30T05:44:10.208125",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "IDS_ALL_UNIQUE = df_train_org.id.unique()\n",
    "print(f'There are {len(IDS_ALL_UNIQUE)} train texts. We will split 90% 10% for validation.')\n",
    "\n",
    "# train valid split 90% 10%\n",
    "\n",
    "# Set the random seed for NumPy to ensure that the random sampling will produce the same results each time the code is run. This is useful for reproducibility.\n",
    "np.random.seed(42)\n",
    "\n",
    "train_idx = np.random.choice(np.arange(len(IDS_ALL_UNIQUE)),int(0.9*len(IDS_ALL_UNIQUE)),replace=False)\n",
    "#  np.arange() function generates an array of evenly spaced values. In this case, it creates an array of integers starting from 0 up to (but not including) len(IDS_ALL_UNIQUE). This array represents the indices of the unique IDs.\n",
    "# np.random.choice generates a random sample from a given 1-D array or range of integers. It can be used to select random elements from an array or to create random samples without replacement. The 2-nd param to np.random.choice() is the output size. replace=False, means each element can only be selected once. \n",
    "\n",
    "\n",
    "valid_idx = np.setdiff1d(np.arange(len(IDS_ALL_UNIQUE)),train_idx)\n",
    "# np.setdiff1d() function is used to find the difference between two arrays. In this case, it computes the difference between the array of all indices (np.arange(len(IDS))) and the selected training indices (train_idx). The result is an array containing the indices not present in the training set, which will be used for the validation set.\n",
    "np.random.seed(None)\n",
    "\n",
    "# CREATE TRAIN SUBSET AND VALID SUBSET\n",
    "df_train = df_ner_texts.loc[df_ner_texts['id'].isin(IDS_ALL_UNIQUE[train_idx])].reset_index(drop=True)\n",
    "\n",
    "df_val = df_ner_texts.loc[df_ner_texts['id'].isin(IDS_ALL_UNIQUE[valid_idx])].reset_index(drop=True)\n",
    "\n",
    "\"\"\" The `reset_index(drop=True)` call is used to reset the index of the DataFrame after filtering out some columns. By default, when columns are filtered from a DataFrame, the index remains the same, and the original index values are preserved. However, in some cases, such as when joining or merging DataFrames, it can be helpful to have a simple sequential index with no missing values.\n",
    "\n",
    "By setting `drop=True`, the old index is dropped and a new sequential index is created. The `copy()` method is used to create a copy of the DataFrame with the new index, instead of modifying the original DataFrame in place. \"\"\"\n",
    "\n",
    "print(f\"FULL Dataset : {df_ner_texts.shape}\")\n",
    "print(f\"TRAIN Dataset: {df_train.shape}\")\n",
    "print(f\"TEST Dataset : {df_val.shape}\")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "4fa0a721",
   "metadata": {
    "papermill": {
     "duration": 0.02846,
     "end_time": "2022-01-30T05:44:10.338335",
     "exception": false,
     "start_time": "2022-01-30T05:44:10.309875",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Download model from huggingface  hub"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "0787936d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:44:10.404796Z",
     "iopub.status.busy": "2022-01-30T05:44:10.403984Z",
     "iopub.status.idle": "2022-01-30T05:44:55.523231Z",
     "shell.execute_reply": "2022-01-30T05:44:55.524207Z",
     "shell.execute_reply.started": "2022-01-30T04:26:50.948100Z"
    },
    "papermill": {
     "duration": 45.154951,
     "end_time": "2022-01-30T05:44:55.524415",
     "exception": false,
     "start_time": "2022-01-30T05:44:10.369464",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "download_hf_model(MODEL_PATH, MODEL_NAME )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "175ed5a2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:44:55.686181Z",
     "iopub.status.busy": "2022-01-30T05:44:55.685282Z",
     "iopub.status.idle": "2022-01-30T05:44:55.773175Z",
     "shell.execute_reply": "2022-01-30T05:44:55.772691Z",
     "shell.execute_reply.started": "2022-01-30T04:28:17.097463Z"
    },
    "papermill": {
     "duration": 0.123811,
     "end_time": "2022-01-30T05:44:55.773319",
     "exception": false,
     "start_time": "2022-01-30T05:44:55.649508",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b10579b2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:44:57.420930Z",
     "iopub.status.busy": "2022-01-30T05:44:57.420056Z",
     "iopub.status.idle": "2022-01-30T05:45:56.091807Z",
     "shell.execute_reply": "2022-01-30T05:45:56.092263Z",
     "shell.execute_reply.started": "2022-01-30T04:28:19.056778Z"
    },
    "papermill": {
     "duration": 60.204284,
     "end_time": "2022-01-30T05:45:56.092415",
     "exception": false,
     "start_time": "2022-01-30T05:44:55.888131",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "%%time\n",
    "tokenized_train = tokenize(df_train, tokenizer, DOC_STRIDE, MAX_LEN, LABELS_TO_IDS)\n",
    "tokenized_val = tokenize(df_val, tokenizer, DOC_STRIDE, MAX_LEN, LABELS_TO_IDS)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b1580136",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:45:56.304523Z",
     "iopub.status.busy": "2022-01-30T05:45:56.303723Z",
     "iopub.status.idle": "2022-01-30T05:45:56.308477Z",
     "shell.execute_reply": "2022-01-30T05:45:56.307930Z",
     "shell.execute_reply.started": "2022-01-30T04:29:32.195655Z"
    },
    "papermill": {
     "duration": 0.04069,
     "end_time": "2022-01-30T05:45:56.308639",
     "exception": false,
     "start_time": "2022-01-30T05:45:56.267949",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "len(tokenized_train['input_ids'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "cae68428",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:45:56.389534Z",
     "iopub.status.busy": "2022-01-30T05:45:56.388762Z",
     "iopub.status.idle": "2022-01-30T05:45:56.396264Z",
     "shell.execute_reply": "2022-01-30T05:45:56.399659Z",
     "shell.execute_reply.started": "2022-01-30T04:29:32.209321Z"
    },
    "papermill": {
     "duration": 0.04913,
     "end_time": "2022-01-30T05:45:56.399830",
     "exception": false,
     "start_time": "2022-01-30T05:45:56.350700",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0, 0, 1, 2, 3, 4, 5, 6, 7, 7])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tokenized_train['overflow_to_sample_mapping'][:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "31ba7bbc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'input_ids': tensor([[    0,  4129,  6909,  ...,     4, 31118,     2],\n",
       "         [    0,  4247,   197,  ...,     1,     1,     1],\n",
       "         [    0,   345,    16,  ...,     1,     1,     1],\n",
       "         ...,\n",
       "         [    0,    96,   452,  ...,     1,     1,     1],\n",
       "         [    0,  7698,    47,  ...,    66,     6,     2],\n",
       "         [    0,   370,  1394,  ...,     1,     1,     1]]),\n",
       " 'attention_mask': tensor([[1, 1, 1,  ..., 1, 1, 1],\n",
       "         [1, 1, 1,  ..., 0, 0, 0],\n",
       "         [1, 1, 1,  ..., 0, 0, 0],\n",
       "         ...,\n",
       "         [1, 1, 1,  ..., 0, 0, 0],\n",
       "         [1, 1, 1,  ..., 1, 1, 1],\n",
       "         [1, 1, 1,  ..., 0, 0, 0]]),\n",
       " 'overflow_to_sample_mapping': tensor([  0,   0,   1,   2,   3,   4,   5,   6,   7,   7,   8,   8,   9,  10,\n",
       "          11,  11,  12,  12,  13,  14,  15,  16,  17,  18,  18,  19,  19,  20,\n",
       "          21,  21,  22,  22,  23,  24,  25,  25,  26,  26,  27,  28,  29,  30,\n",
       "          30,  31,  32,  33,  34,  35,  35,  36,  36,  37,  37,  38,  39,  39,\n",
       "          40,  40,  41,  42,  42,  43,  44,  44,  45,  46,  47,  48,  49,  50,\n",
       "          51,  51,  52,  53,  54,  54,  55,  55,  56,  56,  57,  58,  58,  59,\n",
       "          60,  61,  61,  62,  62,  62,  63,  64,  65,  66,  67,  68,  69,  70,\n",
       "          70,  71,  72,  73,  74,  75,  75,  76,  77,  77,  78,  78,  79,  80,\n",
       "          81,  82,  83,  83,  84,  85,  86,  87,  87,  88,  89,  90,  91,  92,\n",
       "          93,  93,  93,  94,  95,  95,  96,  96,  97,  98,  98,  99,  99, 100,\n",
       "         101, 101, 102, 103, 104, 104, 105, 105, 106, 107, 107, 108, 109, 109,\n",
       "         110, 110, 111, 112, 112, 113, 113, 114, 114, 115, 116, 117, 117, 118,\n",
       "         119, 120, 121, 121]),\n",
       " 'labels': tensor([[-100,    0,    0,  ...,    0,    0, -100],\n",
       "         [-100,   14,   14,  ..., -100, -100, -100],\n",
       "         [-100,    3,    4,  ..., -100, -100, -100],\n",
       "         ...,\n",
       "         [-100,    1,    2,  ..., -100, -100, -100],\n",
       "         [-100,    1,    2,  ...,    0,    0, -100],\n",
       "         [-100,    0,    0,  ..., -100, -100, -100]]),\n",
       " 'wids': tensor([[ -1,   0,   0,  ..., 457, 458,  -1],\n",
       "         [ -1, 354, 355,  ...,  -1,  -1,  -1],\n",
       "         [ -1,   0,   1,  ...,  -1,  -1,  -1],\n",
       "         ...,\n",
       "         [ -1,   0,   1,  ...,  -1,  -1,  -1],\n",
       "         [ -1,   0,   1,  ..., 435, 435,  -1],\n",
       "         [ -1, 328, 329,  ...,  -1,  -1,  -1]])}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tokenized_train"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "afc5c244",
   "metadata": {
    "papermill": {
     "duration": 0.032047,
     "end_time": "2022-01-30T05:45:56.540019",
     "exception": false,
     "start_time": "2022-01-30T05:45:56.507972",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Dataset class"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "867fd100",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:45:56.614014Z",
     "iopub.status.busy": "2022-01-30T05:45:56.612208Z",
     "iopub.status.idle": "2022-01-30T05:45:56.614782Z",
     "shell.execute_reply": "2022-01-30T05:45:56.615338Z",
     "shell.execute_reply.started": "2022-01-30T04:29:32.232741Z"
    },
    "papermill": {
     "duration": 0.043336,
     "end_time": "2022-01-30T05:45:56.615492",
     "exception": false,
     "start_time": "2022-01-30T05:45:56.572156",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "class DataLoaderClass(Dataset):\n",
    "    \"\"\"\n",
    "    Custom PyTorch dataset class for tokenized data.\n",
    "\n",
    "    Args:\n",
    "        tokenized_ds (dict): Tokenized dataset.\n",
    "\n",
    "    \"\"\"\n",
    "    def __init__(self, tokenized_ds):\n",
    "        self.data = tokenized_ds\n",
    "\n",
    "    def __getitem__(self, index):\n",
    "        \"\"\"\n",
    "        Retrieves an item from the dataset at the specified index.\n",
    "\n",
    "        Args:\n",
    "            index (int): Index of the item to retrieve.\n",
    "\n",
    "        Returns:\n",
    "            dict: Dictionary containing the item data.\n",
    "\n",
    "        \"\"\"\n",
    "        # print('print data ', self.data)\n",
    "        item = {k: self.data[k][index] for k in self.data.keys()}\n",
    "        return item\n",
    "\n",
    "    def __len__(self):\n",
    "        \"\"\"\n",
    "        Returns the total number of items in the dataset.\n",
    "\n",
    "        Returns:\n",
    "            int: Total number of items in the dataset.\n",
    "\n",
    "        \"\"\"\n",
    "        return len(self.data['input_ids'])\n",
    "    \n",
    "\n",
    "# Create Datasets and DataLoaders for training and validation dat\n",
    "\n",
    "ds_train = DataLoaderClass(tokenized_train)\n",
    "\n",
    "ds_val = DataLoaderClass(tokenized_val)\n",
    "\n",
    "dataloader_train = DataLoader(ds_train, batch_size=config['train_batch_size'], \n",
    "                      shuffle=True, num_workers=0, pin_memory=True)\n",
    "\n",
    "dataloader_val = DataLoader(ds_val, batch_size=config['valid_batch_size'], \n",
    "                    shuffle=False, num_workers=0, pin_memory=True)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "e275c125",
   "metadata": {},
   "source": [
    "## OUTPUT OF `print('print data ', self.data)` in `__getitem__(self, index)` method above\n",
    "\n",
    "```\n",
    "{'input_ids': tensor([[    0,  4129,  6909,  ...,     4, 31118,     2],\n",
    "        [    0,  4247,   197,  ...,     1,     1,     1],\n",
    "        [    0,   345,    16,  ...,     1,     1,     1],\n",
    "        ...,\n",
    "        [    0,    96,   452,  ...,     1,     1,     1],\n",
    "        [    0,  7698,    47,  ...,    66,     6,     2],\n",
    "        [    0,   370,  1394,  ...,     1,     1,     1]]), 'attention_mask': tensor([[1, 1, 1,  ..., 1, 1, 1],\n",
    "        [1, 1, 1,  ..., 0, 0, 0],\n",
    "        [1, 1, 1,  ..., 0, 0, 0],\n",
    "        ...,\n",
    "        [1, 1, 1,  ..., 0, 0, 0],\n",
    "        [1, 1, 1,  ..., 1, 1, 1],\n",
    "        [1, 1, 1,  ..., 0, 0, 0]]), 'overflow_to_sample_mapping': tensor([  0,   0,   1,   2,   3,   4,   5,   6,   7,   7,   8,   8,   9,  10,\n",
    "         11,  11,  12,  12,  13,  14,  15,  16,  17,  18,  18,  19,  19,  20,\n",
    "         21,  21,  22,  22,  23,  24,  25,  25,  26,  26,  27,  28,  29,  30,\n",
    "         30,  31,  32,  33,  34,  35,  35,  36,  36,  37,  37,  38,  39,  39,\n",
    "         40,  40,  41,  42,  42,  43,  44,  44,  45,  46,  47,  48,  49,  50,\n",
    "         51,  51,  52,  53,  54,  54,  55,  55,  56,  56,  57,  58,  58,  59,\n",
    "         60,  61,  61,  62,  62,  62,  63,  64,  65,  66,  67,  68,  69,  70,\n",
    "         70,  71,  72,  73,  74,  75,  75,  76,  77,  77,  78,  78,  79,  80,\n",
    "         81,  82,  83,  83,  84,  85,  86,  87,  87,  88,  89,  90,  91,  92,\n",
    "         93,  93,  93,  94,  95,  95,  96,  96,  97,  98,  98,  99,  99, 100,\n",
    "        101, 101, 102, 103, 104, 104, 105, 105, 106, 107, 107, 108, 109, 109,\n",
    "        110, 110, 111, 112, 112, 113, 113, 114, 114, 115, 116, 117, 117, 118,\n",
    "        119, 120, 121, 121]), 'labels': tensor([[-100,    0,    0,  ...,    0,    0, -100],\n",
    "        [-100,   14,   14,  ..., -100, -100, -100],\n",
    "        [-100,    3,    4,  ..., -100, -100, -100],\n",
    "        ...,\n",
    "        [-100,    1,    2,  ..., -100, -100, -100],\n",
    "        [-100,    1,    2,  ...,    0,    0, -100],\n",
    "        [-100,    0,    0,  ..., -100, -100, -100]]), 'wids': tensor([[ -1,   0,   0,  ..., 457, 458,  -1],\n",
    "        [ -1, 354, 355,  ...,  -1,  -1,  -1],\n",
    "        [ -1,   0,   1,  ...,  -1,  -1,  -1],\n",
    "        ...,\n",
    "        [ -1,   0,   1,  ...,  -1,  -1,  -1],\n",
    "        [ -1,   0,   1,  ..., 435, 435,  -1],\n",
    "        [ -1, 328, 329,  ...,  -1,  -1,  -1]])}\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "54528fb9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 'O',\n",
       " 1: 'B-Lead',\n",
       " 2: 'I-Lead',\n",
       " 3: 'B-Position',\n",
       " 4: 'I-Position',\n",
       " 5: 'B-Claim',\n",
       " 6: 'I-Claim',\n",
       " 7: 'B-Counterclaim',\n",
       " 8: 'I-Counterclaim',\n",
       " 9: 'B-Rebuttal',\n",
       " 10: 'I-Rebuttal',\n",
       " 11: 'B-Evidence',\n",
       " 12: 'I-Evidence',\n",
       " 13: 'B-Concluding Statement',\n",
       " 14: 'I-Concluding Statement'}"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "IDS_TO_LABELS"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "b4cd7f4b",
   "metadata": {
    "papermill": {
     "duration": 0.032776,
     "end_time": "2022-01-30T05:45:57.345131",
     "exception": false,
     "start_time": "2022-01-30T05:45:57.312355",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Model Definition"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "84703fd9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:45:57.421437Z",
     "iopub.status.busy": "2022-01-30T05:45:57.420231Z",
     "iopub.status.idle": "2022-01-30T05:46:05.947740Z",
     "shell.execute_reply": "2022-01-30T05:46:05.946858Z",
     "shell.execute_reply.started": "2022-01-30T04:29:32.359220Z"
    },
    "papermill": {
     "duration": 8.570609,
     "end_time": "2022-01-30T05:46:05.947905",
     "exception": false,
     "start_time": "2022-01-30T05:45:57.377296",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "config_model = AutoConfig.from_pretrained(MODEL_PATH+'/config.json') \n",
    "model = AutoModelForTokenClassification.from_pretrained(\n",
    "                   MODEL_PATH+'/pytorch_model.bin',config=config_model)\n",
    "model.to(config['device']);"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "dc441df6",
   "metadata": {
    "papermill": {
     "duration": 0.0324,
     "end_time": "2022-01-30T05:46:06.018288",
     "exception": false,
     "start_time": "2022-01-30T05:46:05.985888",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Training and validation loop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "16b47d2b",
   "metadata": {},
   "outputs": [],
   "source": [
    "unique_valid_id_list = IDS_ALL_UNIQUE[valid_idx] # this variable needs to be passed as an argument to the validate() emthod\n",
    "\n",
    "# Below line is just for checking out that df_valid looks ok, as it will be used \n",
    "# inside the validate() method\n",
    "df_valid = df_train_org.loc[df_train_org['id'].isin(unique_valid_id_list)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "7376a998",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>discourse_id</th>\n",
       "      <th>discourse_start</th>\n",
       "      <th>discourse_end</th>\n",
       "      <th>discourse_text</th>\n",
       "      <th>discourse_type</th>\n",
       "      <th>discourse_type_num</th>\n",
       "      <th>predictionstring</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>115</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>1.622470e+12</td>\n",
       "      <td>20</td>\n",
       "      <td>370</td>\n",
       "      <td>Look around you! All you see is people from al...</td>\n",
       "      <td>Lead</td>\n",
       "      <td>Lead 1</td>\n",
       "      <td>3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>1.622470e+12</td>\n",
       "      <td>371</td>\n",
       "      <td>476</td>\n",
       "      <td>Phones can be such a distraction to everyone a...</td>\n",
       "      <td>Claim</td>\n",
       "      <td>Claim 1</td>\n",
       "      <td>65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 8...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>117</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>1.622470e+12</td>\n",
       "      <td>477</td>\n",
       "      <td>1321</td>\n",
       "      <td>A major cause of deaths in the US is motor veh...</td>\n",
       "      <td>Evidence</td>\n",
       "      <td>Evidence 1</td>\n",
       "      <td>83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 9...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>118</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>1.622470e+12</td>\n",
       "      <td>1322</td>\n",
       "      <td>1435</td>\n",
       "      <td>Many people may say that teens are the ones dr...</td>\n",
       "      <td>Counterclaim</td>\n",
       "      <td>Counterclaim 1</td>\n",
       "      <td>229 230 231 232 233 234 235 236 237 238 239 24...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>1.622470e+12</td>\n",
       "      <td>1436</td>\n",
       "      <td>1498</td>\n",
       "      <td>In reality, everyone from every age is irrespo...</td>\n",
       "      <td>Rebuttal</td>\n",
       "      <td>Rebuttal 1</td>\n",
       "      <td>248 249 250 251 252 253 254 255 256</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               id  discourse_id  discourse_start  discourse_end  \\\n",
       "115  019328A0D7A3  1.622470e+12               20            370   \n",
       "116  019328A0D7A3  1.622470e+12              371            476   \n",
       "117  019328A0D7A3  1.622470e+12              477           1321   \n",
       "118  019328A0D7A3  1.622470e+12             1322           1435   \n",
       "119  019328A0D7A3  1.622470e+12             1436           1498   \n",
       "\n",
       "                                        discourse_text discourse_type  \\\n",
       "115  Look around you! All you see is people from al...           Lead   \n",
       "116  Phones can be such a distraction to everyone a...          Claim   \n",
       "117  A major cause of deaths in the US is motor veh...       Evidence   \n",
       "118  Many people may say that teens are the ones dr...   Counterclaim   \n",
       "119  In reality, everyone from every age is irrespo...       Rebuttal   \n",
       "\n",
       "    discourse_type_num                                   predictionstring  \n",
       "115             Lead 1  3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...  \n",
       "116            Claim 1  65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 8...  \n",
       "117         Evidence 1  83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 9...  \n",
       "118     Counterclaim 1  229 230 231 232 233 234 235 236 237 238 239 24...  \n",
       "119         Rebuttal 1                248 249 250 251 252 253 254 255 256  "
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_valid.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "e2dd4a5d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>class</th>\n",
       "      <th>predictionstring</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>Rebuttal</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>Claim</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>Lead</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>Lead</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>019328A0D7A3</td>\n",
       "      <td>Claim</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             id     class predictionstring\n",
       "0  019328A0D7A3  Rebuttal                0\n",
       "1  019328A0D7A3     Claim                1\n",
       "2  019328A0D7A3      Lead                2\n",
       "3  019328A0D7A3      Lead                3\n",
       "4  019328A0D7A3     Claim                4"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Here just testing the get_prediction() method\n",
    "out_of_fold = get_predictions(df_val, dataloader_val, model)\n",
    "out_of_fold.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "112c1c84",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-01-30T05:46:06.095610Z",
     "iopub.status.busy": "2022-01-30T05:46:06.094687Z",
     "iopub.status.idle": "2022-01-30T11:47:44.093528Z",
     "shell.execute_reply": "2022-01-30T11:47:44.094812Z"
    },
    "papermill": {
     "duration": 21698.042944,
     "end_time": "2022-01-30T11:47:44.095070",
     "exception": false,
     "start_time": "2022-01-30T05:46:06.052126",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "optimizer = torch.optim.Adam(params=model.parameters(), lr=config['learning_rates'][0])\n",
    "\n",
    "for epoch in range(config['epochs']):\n",
    "    print()\n",
    "    train(model, optimizer, dataloader_train, epoch)\n",
    "    validate(model, df_train_org, df_val, dataloader_val, epoch, IDS_ALL_UNIQUE)\n",
    "    \n",
    "print(\"Final model 'pytorch_model.bin'\")\n",
    "\n",
    "torch.save(model.state_dict(), 'pytorch_model.bin')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  },
  "papermill": {
   "default_parameters": {},
   "duration": 21868.994739,
   "end_time": "2022-01-30T11:47:47.474157",
   "environment_variables": {},
   "exception": null,
   "input_path": "__notebook__.ipynb",
   "output_path": "__notebook__.ipynb",
   "parameters": {},
   "start_time": "2022-01-30T05:43:18.479418",
   "version": "2.3.3"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "03d1107e0c8c4ede8568b0cf7ab56fbd": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "0b3d4b4ad7a745fe82e37a2ef4e3dd13": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_c65e4a36e232426bacc4cd2a1b85f1b8",
        "IPY_MODEL_dbf39bfc327147d89ea5f6abde40bdee",
        "IPY_MODEL_49cc54aeebcd4a1b930cf58a7ec9ed41"
       ],
       "layout": "IPY_MODEL_ce7fdf71ada640b38af912b8664f9815"
      }
     },
     "1731e45e3c6a4f8fafe9a101b17384df": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "17453d8c44f8405fadc0b9d6acdacf79": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "1889fa898cbb494caef83617e8c084a5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "195dbc48deb3462fb1f5a2ecf509ee77": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "1c5be45b4dc6439d9a8ddfe795901e7e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "1d1b35bdc6774dd8bb9f22ad6f17632a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "238a0504eff742819a52f647e30edc3e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "24cce62571e6435ea32d96831bcbc39a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_1731e45e3c6a4f8fafe9a101b17384df",
       "max": 898823,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_a6a8961015ee43ef8f8f1a7f04364615",
       "value": 898823
      }
     },
     "27da3749104e4abbb44a874530d8ebeb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_5ad23232548f48668f5d2aa23d28b03b",
       "placeholder": "​",
       "style": "IPY_MODEL_5ababca8c2a94ef99fd3d34dd9374277",
       "value": " 482/482 [00:00&lt;00:00, 19.4kB/s]"
      }
     },
     "2ab69552232f45428b4e1bea963f168c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "VBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "VBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "VBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_c5db8232fbf54dca93aae513dce5f0a2",
        "IPY_MODEL_cbd5ce910bba4bb39aec82065359659b"
       ],
       "layout": "IPY_MODEL_c506196c70cc4ea0acc72a3b6a11018d"
      }
     },
     "317fdc4bf90943e7b1bd32ab9b78a5ec": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_d6a8698319d04c86a381759f9954f26f",
        "IPY_MODEL_24cce62571e6435ea32d96831bcbc39a",
        "IPY_MODEL_ff2437b2f7294ff493f576cd921bbf8e"
       ],
       "layout": "IPY_MODEL_6baab5e359574bb2940b278b6eb072e8"
      }
     },
     "405b3064927243cda2ababe899d88cc6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_6e33c2808bfc441fa152ba5a4d65ddaf",
        "IPY_MODEL_63414d13d0164943804d0fda9d3fa284",
        "IPY_MODEL_5838765126a548e7bce34bd6b0bedd99"
       ],
       "layout": "IPY_MODEL_238a0504eff742819a52f647e30edc3e"
      }
     },
     "438dcc0f5ce049d894ccefff6daaedf2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_195dbc48deb3462fb1f5a2ecf509ee77",
       "max": 482,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_d0d12a6be324452d949f61219f753994",
       "value": 482
      }
     },
     "45c576498b0144d6b2c17d41c484ed25": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_ae8f56475395405385a9a95371b37419",
        "IPY_MODEL_e38a077ed5d94261b0f7d5c25aa9bb38",
        "IPY_MODEL_79d18aab530349c59e7561b471411147"
       ],
       "layout": "IPY_MODEL_1d1b35bdc6774dd8bb9f22ad6f17632a"
      }
     },
     "46be221c681243a2a4d1509fb26b3497": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_70bb35f100aa41a4a0ac19a05e42067a",
       "placeholder": "​",
       "style": "IPY_MODEL_c12bf66373004649aac2d21d2a2f8e48",
       "value": "Downloading: 100%"
      }
     },
     "49cc54aeebcd4a1b930cf58a7ec9ed41": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_95c99dd49ab74c749529f18d43e6dff4",
       "placeholder": "​",
       "style": "IPY_MODEL_be22a8a8fe1c42b4905db07564cd2780",
       "value": " 446k/446k [00:00&lt;00:00, 861kB/s]"
      }
     },
     "507a96e3ddad43b9bf7895b12f60456c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "50a62d6b673842e4b7cf15806b82411c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "5838765126a548e7bce34bd6b0bedd99": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_a5ba2f84574442458876abb7e743946f",
       "placeholder": "​",
       "style": "IPY_MODEL_1c5be45b4dc6439d9a8ddfe795901e7e",
       "value": " 1.29M/1.29M [00:00&lt;00:00, 2.87MB/s]"
      }
     },
     "5ababca8c2a94ef99fd3d34dd9374277": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "5ad23232548f48668f5d2aa23d28b03b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "6310d35881ec4cd78b9db9f6af6ab710": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "63414d13d0164943804d0fda9d3fa284": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_b36edce9aecb45098a13fb021ec38876",
       "max": 1355863,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_f3585581073a452d9a394d5763474198",
       "value": 1355863
      }
     },
     "6baab5e359574bb2940b278b6eb072e8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "6db0cc316a7e4a60977b8bd5357fca78": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_46be221c681243a2a4d1509fb26b3497",
        "IPY_MODEL_438dcc0f5ce049d894ccefff6daaedf2",
        "IPY_MODEL_27da3749104e4abbb44a874530d8ebeb"
       ],
       "layout": "IPY_MODEL_abdd6abd542845429dd538d1786b021c"
      }
     },
     "6e33c2808bfc441fa152ba5a4d65ddaf": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_fd7b037b13fa483ba27eb74ba448138c",
       "placeholder": "​",
       "style": "IPY_MODEL_6310d35881ec4cd78b9db9f6af6ab710",
       "value": "Downloading: 100%"
      }
     },
     "70bb35f100aa41a4a0ac19a05e42067a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "79d18aab530349c59e7561b471411147": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_c696ff608ddd46519c6cbbc88fa8c4e3",
       "placeholder": "​",
       "style": "IPY_MODEL_50a62d6b673842e4b7cf15806b82411c",
       "value": " 1.33G/1.33G [00:31&lt;00:00, 22.5MB/s]"
      }
     },
     "86268e9539b842fdaf813e301c9b6034": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "95c99dd49ab74c749529f18d43e6dff4": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "9acaa1dff0c34dd7847029111a0c092a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "a245e4b763f14d2daa8753c9251b57ef": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "a5ba2f84574442458876abb7e743946f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "a6a8961015ee43ef8f8f1a7f04364615": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "abdd6abd542845429dd538d1786b021c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ae8f56475395405385a9a95371b37419": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_bcce0458818f428999e00bbf92ede2d2",
       "placeholder": "​",
       "style": "IPY_MODEL_03d1107e0c8c4ede8568b0cf7ab56fbd",
       "value": "Downloading: 100%"
      }
     },
     "b36edce9aecb45098a13fb021ec38876": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "bcce0458818f428999e00bbf92ede2d2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "be22a8a8fe1c42b4905db07564cd2780": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "c12bf66373004649aac2d21d2a2f8e48": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "c1b5433c289648d18becfbf30cedef31": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "c506196c70cc4ea0acc72a3b6a11018d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c5db8232fbf54dca93aae513dce5f0a2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "LabelModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "LabelModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "LabelView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_ec8ec1ce39ec498082181a215d625ab0",
       "placeholder": "​",
       "style": "IPY_MODEL_f38edae23451422ea99734729fb4c438",
       "value": ""
      }
     },
     "c65e4a36e232426bacc4cd2a1b85f1b8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_cd25fd2f3a1741bbb7aed0037fd642e1",
       "placeholder": "​",
       "style": "IPY_MODEL_a245e4b763f14d2daa8753c9251b57ef",
       "value": "Downloading: 100%"
      }
     },
     "c696ff608ddd46519c6cbbc88fa8c4e3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c7e671ffd8494e0fa65b6bf4965ab353": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "cbd5ce910bba4bb39aec82065359659b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_fd36bc48c83b45f6879db4a40153d69a",
       "max": 1,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_507a96e3ddad43b9bf7895b12f60456c",
       "value": 0
      }
     },
     "cd25fd2f3a1741bbb7aed0037fd642e1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ce7fdf71ada640b38af912b8664f9815": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "d0a2e997c7654a71ad4c92a883bc600c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "d0d12a6be324452d949f61219f753994": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "d6a8698319d04c86a381759f9954f26f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_17453d8c44f8405fadc0b9d6acdacf79",
       "placeholder": "​",
       "style": "IPY_MODEL_c1b5433c289648d18becfbf30cedef31",
       "value": "Downloading: 100%"
      }
     },
     "d8bf42c584604123aa3bd984b7e60f9b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "dbf39bfc327147d89ea5f6abde40bdee": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_c7e671ffd8494e0fa65b6bf4965ab353",
       "max": 456318,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_86268e9539b842fdaf813e301c9b6034",
       "value": 456318
      }
     },
     "e38a077ed5d94261b0f7d5c25aa9bb38": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_9acaa1dff0c34dd7847029111a0c092a",
       "max": 1425941629,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_1889fa898cbb494caef83617e8c084a5",
       "value": 1425941629
      }
     },
     "ec8ec1ce39ec498082181a215d625ab0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "f3585581073a452d9a394d5763474198": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "f38edae23451422ea99734729fb4c438": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "fd36bc48c83b45f6879db4a40153d69a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "fd7b037b13fa483ba27eb74ba448138c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ff2437b2f7294ff493f576cd921bbf8e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_d8bf42c584604123aa3bd984b7e60f9b",
       "placeholder": "​",
       "style": "IPY_MODEL_d0a2e997c7654a71ad4c92a883bc600c",
       "value": " 878k/878k [00:00&lt;00:00, 2.86MB/s]"
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
